/*
题目: 找到K个最接近的元素
给定一个 排序好 的数组 arr ，两个整数 k 和 x ，从数组中找到最靠近 x（两数之差最小）的 k 个数。返回的结果必须要是按升序排好的。

整数 a 比整数 b 更接近 x 需要满足：

    |a - x| < |b - x| 或者
    |a - x| == |b - x| 且 a < b

https://leetcode.cn/problems/find-k-closest-elements
 */
public class FindClosestElements {
    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        // 自定义排序
        ArrayList<Integer> list = new ArrayList<> ();
        for (int i = 0; i < arr.length; i++) {
            list.add(arr[i]);
        }

        Integer base = x;
        Collections.sort(list, new Comparator<Integer> () {
            public int compare(Integer o1, Integer o2) {
                return Math.abs(o1 - base) - Math.abs(o2 - base);
            }
        });

        ArrayList<Integer> result = new ArrayList<> ();
        for (int i = 0; i < k; i++) {
            result.add(list.get(i));
        }
        Collections.sort(result);
        return result;
    }
}
